import json

from django.http import HttpResponse
from django.http import JsonResponse
from django.shortcuts import render, redirect


# Create your views here.
from django.urls import reverse


def get_body_json(request):
    """演示从请求体中读取非标单数据"""
    # 读取原始的非表单的字符串信息
    #　读取ｊｓｏｎ字符串的二进制信息
    json_str = request.body
    # 将ｊｓｏｎ字符串二进制信息转成ｊｓｏｎ字符串
    json_str = json_str.decode()
    # 将ｊｓｏｎ字符串转成字典，方便后续的取值
    req_data = json.loads(json_str)

    print(req_data['a'])
    print(req_data['b'])

    return HttpResponse('OK')

def get_body_form(request):
    """演示读取请求体的中表单数据，ｒｅｑｕｅｓｔ。ＰＯＳＴ　　读取请求体中的表单数据　　ＱｕｅｒｙＤｉｃｔ类型的对象"""
    # 读取表单数据
    like = request.POST.get('like')
    a = request.POST.get('a')
    like_list = request.POST.getist('like')
    print(like,a,like_list)


def session_demo(request):
    """演示操作ｓｅｓｓｉｏｎ缓存数据的读取"""
    #　将缓存的数据写入到ｓｅｓｓｉｏｎ
    request.session['name'] = 'zxc'
    # 上面的代码会将ｓｅｓｓｉｏｎ缓存到ｒｅｄｉｓ中
    # 并向浏览器写入一个ｃｏｏｋｉｅ；ｓｅｓｓｉｏ－ｉｄ写入到ｃｏｏｋｉｅ

    # 读取ｓｅｓｓｉｏｎ中的缓存数据
    name = request.session.get('name')
    print(request.user)
    # 会将ｒｅｑｕｅｓｔ.COOKIES中读取的原先写入的ｓｅｓｓｉｏｎ－ｉｄ
    # 会食用session_id读取ｒｅｄｉｓ中存储的那条缓存记录
    # 最后使用ｎａｍｅ作为ｋｅｙ，读取那条记录中的存储的ｚｘｃ

    print(name)

    # 响应结果
    return HttpResponse('OK')

def cookie_demo(request):
    """演示ｃｏｏｋｉｅ缓存数据的读写"""

    # 创建ｒｅｓｐｏｎｓｅ对象
    response = HttpResponse('OK')

    # 写入缓存数据到浏览器的ｃｏｏｋｉｅ
    # response.set_cookie(cookie名，ｖａｌｕｅ＝ｃｏｏｋｉｅ值，ｍａｘ－ａｇｅ＝ｃｏｏｋｉｅ有效期，单位是秒）
    response.set_cookie('name','zxc',max_age=3600)

    # 读取ｃｏｏｋｉｅ
    name = request.COOKIES.get('name')
    print(name)

    return response

# GET /response_redirect/
def response_redirect(request):
    """演示从定向"""
    # 需求：访问‘ｒｅｓｐｏｎｓｅ－ｒｅｄｉｒｅｃｔ／’重定向打牌‘ｕｓｅｒｓ。ｉｎｄｅｘ
    # return redirect('/users/index/')

    # 使用反向解析进行重定向　　ｒｅｖｅｒｓｅ（‘ｕｓｅｒｓ：ｉｎｄｅｘ’）　＝＝　‘／ｕｓｅｒｓ／ｉｎｄｅｘ／’

    return redirect(reverse('users:index'))

def response_json(request):
    """演示响应ＪＳＯＮ数据"""

    # 定义字典：定义ｊｓｏｎ结构的数据时，ｋｅｙ需要是双引号
    json_dict = {"name":"zxs","age":2.3}

    # 默认把json_dict转成了ｊｓｏｎ字符串
    # 再默认把ｊｓｏｎ字符串转成二进制的ｊｓｏｎ字符串
    # 默认把数据类型指定未application/json
    return JsonResponse(json_dict)

def response_demo(request):
    """演示响应的常规操作"""

    # HttpResponse(content=响应体，ｃｏｎｔｅｎｔ_type=响应体数据类型，ｓｔａｔｕｓ＝状态码）
    response = HttpResponse("Ok   OK",content_type='text/plain',status=200)
    # 自定义响应头
    response['Itcast'] = 'python'

    return response



# 提示：可以是意见一致，或者多键多值（爱好的选项）
# weather3/beijing/2018/?a=10&b=20&a=30
def weather3(request,city,year):
    """演示提取查询字符串
    request.GET == """

    print(city)
    print(year)

    # 读取查询字符串：？ａ
    a = request.GET.get('a')
    b = request.GET.get('b')
    a_list = request.GET.getlist('a')
    print(a,b,a_list)

    return HttpResponse('ok')

def weather2(request,city,year):
    """演示正则的组提取ＵＲＬ路径参数：关键字参数
    提示：
    """
    print(city,year)
    return HttpResponse('ok')

def weather1(request,city,year):
    print(city,year)
    return HttpResponse('ok')